home *** CD-ROM | disk | FTP | other *** search
/ Aminet 19 / Aminet 19 (1997)(GTI - Schatztruhe)[!][Jun 1997].iso / Aminet / demo / mag / trash3_2.lha / fuentes / FuentesFXC2P.lha / FXC2P.Conv_16Col_Gen駻ica < prev    next >
Text File  |  1992-09-02  |  8KB  |  357 lines

  1. ; En A5 metemos el inicio de donde queremos convertir en PVC
  2. ; En A6 metemos el inicio de donde queremos pintar en PFP
  3. ; Al final de PlanoX cambiar 10240 y similares para ajustar tamaño
  4. ; En d0 y d1 van Ancho (en LONGS) y Alto (PIXELS(BITS)) 
  5. ; En d2 meter el módulo del PFP
  6.  
  7. ************************************
  8. **** Plano 1 ***********************
  9. ************************************
  10. C2P_Conversion
  11.     subq    #1,d0
  12.     subq    #1,d1
  13. .loopY
  14.     move.l    d2,-(sp)    
  15.     move.w    d1,-(sp)    
  16. .loopX
  17.     move.w    d0,-(sp)
  18.     Moveq    #-1,D5        ;Mascara para Bytes Chunky (Plano 1)
  19.  
  20. ;    move.l    (a5)+,a0    ;Long 1 chunky (pixels  0 -  3)
  21. ;    move.l    (a5)+,a1    ;Long 2 chunky (pixels  4 -  7)
  22. ;    move.l    (a5)+,a2    ;Long 3 chunky (pixels  8 - 11)
  23. ;    move.l    (a5)+,a3    ;Long 4 chunky (pixels 12 - 15)
  24. ;    move.l    (a5)+,a4    ;Long 5 chunky (pixels 16 - 19)
  25. ;    move.l    (a5)+,d4    ;Long 6 chunky (pixels 20 - 23)
  26. ;    move.l    (a5)+,d6    ;Long 7 chunky (pixels 24 - 27)
  27. ;    move.l    (a5)+,d7    ;Long 8 chunky (pixels 28 - 31)
  28.  
  29.     movem.l (a5)+,a0-a4/d4-d7
  30.  
  31.     move.l    a0,d0        
  32.     move.l    a1,d2
  33.     lsl.l    #4,d2
  34.     or.l    d2,d0
  35.     and.l    d5,d0
  36.  
  37. ;    00004321000043210000432100004321
  38. ;    43210000432100004321000043210000
  39. ;    43214321432143214321432143214321
  40. ;    00010001000100010001000100010001 -> d0
  41. ;       4   0   5   1   6   2   7   3
  42.  
  43.     move.l    a2,d1
  44.     move.l    a3,d2
  45.     lsl.l    #4,d2
  46.     or.l    d2,d1
  47.     and.l    d5,d1
  48.  
  49. ;    00004321000043210000432100004321
  50. ;    43210000432100004321000043210000
  51. ;    43214321432143214321432143214321
  52. ;    00010001000100010001000100010001 -> d1
  53. ;      12   8  13   9  14  10  15  11
  54.  
  55.     lsl.l    #1,d1
  56.     or.l    d1,d0
  57.  
  58. ;    00110011001100110011001100110011 -> d0
  59.  
  60.     move.l    a4,d1
  61.     move.l    d4,d2
  62.     lsl.l    #4,d2
  63.     or.l    d2,d1
  64.     and.l    d5,d1
  65.  
  66. ;    00004321000043210000432100004321
  67. ;    43210000432100004321000043210000
  68. ;    43214321432143214321432143214321
  69. ;    00010001000100010001000100010001 -> d1
  70. ;      20  16  21  17  22  18  23  19
  71.  
  72.     move.l    a6,d3
  73.     move.l    a7,d2
  74.     lsl.l    #4,d2
  75.     or.l    d2,d3
  76.     and.l    d5,d3
  77.  
  78. ;    00004321000043210000432100004321
  79. ;    43210000432100004321000043210000
  80. ;    43214321432143214321432143214321
  81. ;    00010001000100010001000100010001 -> d3
  82. ;      28  24  29  25  30  26  31  27
  83.  
  84.     lsl.l    #1,d3
  85.     or.l    d3,d1
  86.  
  87. ;    00110011001100110011001100110011 -> d1
  88.  
  89.     lsl.l    #4,d1
  90.     or.l    d1,d0            ;d0 = mezcla de todas las longs
  91.  
  92. ;    11111111111111111111111111111111 -> d0
  93.  
  94.     move.l    d0,(a6)            ;Pintamos 32 pixels de golpe en el Plano 1
  95.  
  96.  
  97. ; Scrambled X Data:
  98.  
  99. ; (03,11,19,27,07,15,23,31,02,10,18,26,06,14,22,30)    (0-15)
  100. ; (01,09,17,25,05,13,21,29,00,08,16,24,04,12,20,28)     (16-31)
  101.  
  102.  
  103. ************************************
  104. **** Plano 2 ***********************
  105. ************************************
  106.  
  107.     lsl.l    #1,d5            ;Mascara para el plano 2
  108.  
  109.     move.l    a0,d0
  110.     move.l    a1,d2
  111.     lsl.l    #4,d2
  112.     or.l    d2,d0
  113.     and.l    d5,d0
  114.     lsr.l    #1,d0
  115.  
  116. ;    00004321000043210000432100004321
  117. ;    43210000432100004321000043210000
  118. ;    43214321432143214321432143214321
  119. ;    00010001000100010001000100010001 -> d0
  120. ;       4   0   5   1   6   2   7   3
  121.  
  122.     move.l    a2,d1
  123.     move.l    a3,d2
  124.     lsl.l    #4,d2
  125.     or.l    d2,d1
  126.     and.l    d5,d1
  127.  
  128. ;    00004321000043210000432100004321
  129. ;    43210000432100004321000043210000
  130. ;    43214321432143214321432143214321
  131. ;    00100010001000100010001000100010 -> d1
  132. ;      12   8  13   9  14  10  15  11
  133.  
  134.     or.l    d1,d0
  135.  
  136. ;    00110011001100110011001100110011 -> d0
  137.  
  138.     move.l    a4,d1
  139.     move.l    d4,d2
  140.     lsl.l    #4,d2
  141.     or.l    d2,d1
  142.     and.l    d5,d1
  143.     lsr.l    #1,d1
  144.  
  145. ;    00004321000043210000432100004321
  146. ;    43210000432100004321000043210000
  147. ;    43214321432143214321432143214321
  148. ;    00010001000100010001000100010001 -> d1
  149. ;      20  16  21  17  22  18  23  19
  150.  
  151.     move.l    a6,d3
  152.     move.l    a7,d2
  153.     lsl.l    #4,d2
  154.     or.l    d2,d3
  155.     and.l    d5,d3
  156.  
  157. ;    00004321000043210000432100004321
  158. ;    43210000432100004321000043210000
  159. ;    43214321432143214321432143214321
  160. ;    00100010001000100010001000100010 -> d3
  161. ;      28  24  29  25  30  26  31  27
  162.  
  163.     or.l    d3,d1
  164.  
  165. ;    00110011001100110011001100110011 -> d1
  166.  
  167.     lsl.l    #4,d1
  168.     or.l    d1,d0            ;d0 = mezcla de todas las longs
  169.  
  170. ;    11111111111111111111111111111111 -> d0
  171.  
  172. ;    lea    10240(a6),a6
  173.     move.l    d0,10240(a6)            ;Pintamos 32 pixels de golpe en el Plano 2
  174.  
  175. ************************************
  176. **** Plano 3 ***********************
  177. ************************************
  178.  
  179.     lsl.l    #1,d5            ;Mascara para el plano 3
  180.  
  181.     move.l    a0,d0
  182.     move.l    a1,d2
  183.     lsl.l    #4,d2
  184.     or.l    d2,d0
  185.     and.l    d5,d0
  186.     lsr.l    #1,d0
  187.  
  188. ;    00004321000043210000432100004321
  189. ;    43210000432100004321000043210000
  190. ;    43214321432143214321432143214321
  191. ;    00010001000100010001000100010001 -> d0
  192. ;       4   0   5   1   6   2   7   3
  193.  
  194.     move.l    a2,d1
  195.     move.l    a3,d2
  196.     lsl.l    #4,d2
  197.     or.l    d2,d1
  198.     and.l    d5,d1
  199.  
  200. ;    00004321000043210000432100004321
  201. ;    43210000432100004321000043210000
  202. ;    43214321432143214321432143214321
  203. ;    00100010001000100010001000100010 -> d1
  204. ;      12   8  13   9  14  10  15  11
  205.  
  206.     or.l    d1,d0
  207.  
  208. ;    00110011001100110011001100110011 -> d0
  209.  
  210.     move.l    a4,d1
  211.     move.l    d4,d2
  212.     lsl.l    #4,d2
  213.     or.l    d2,d1
  214.     and.l    d5,d1
  215.     lsr.l    #1,d1
  216.  
  217. ;    00004321000043210000432100004321
  218. ;    43210000432100004321000043210000
  219. ;    43214321432143214321432143214321
  220. ;    00010001000100010001000100010001 -> d1
  221. ;      20  16  21  17  22  18  23  19
  222.  
  223.     move.l    a6,d3
  224.     move.l    a7,d2
  225.     lsl.l    #4,d2
  226.     or.l    d2,d3
  227.     and.l    d5,d3
  228.  
  229. ;    00004321000043210000432100004321
  230. ;    43210000432100004321000043210000
  231. ;    43214321432143214321432143214321
  232. ;    00100010001000100010001000100010 -> d3
  233. ;      28  24  29  25  30  26  31  27
  234.  
  235.     or.l    d3,d1
  236.  
  237. ;    00110011001100110011001100110011 -> d1
  238.  
  239.     lsl.l    #4,d1
  240.     or.l    d1,d0            ;d0 = mezcla de todas las longs
  241.  
  242. ;    11111111111111111111111111111111 -> d0
  243.  
  244. ;    lea    10240(a6),a6
  245.     move.l    d0,20480(a6)            ;Pintamos 32 pixels de golpe en el Plano 3
  246.  
  247. ************************************
  248. **** Plano 4 ***********************
  249. ************************************
  250.  
  251.     lsl.l    #1,d5            ;Mascara para el plano 4
  252.  
  253.     move.l    a0,d0
  254.     move.l    a1,d2
  255.     lsl.l    #4,d2
  256.     or.l    d2,d0
  257.     and.l    d5,d0
  258.     lsr.l    #1,d0
  259.  
  260. ;    00004321000043210000432100004321
  261. ;    43210000432100004321000043210000
  262. ;    43214321432143214321432143214321
  263. ;    00010001000100010001000100010001 -> d0
  264. ;       4   0   5   1   6   2   7   3
  265.  
  266.     move.l    a2,d1
  267.     move.l    a3,d2
  268.     lsl.l    #4,d2
  269.     or.l    d2,d1
  270.     and.l    d5,d1
  271.  
  272. ;    00004321000043210000432100004321
  273. ;    43210000432100004321000043210000
  274. ;    43214321432143214321432143214321
  275. ;    00100010001000100010001000100010 -> d1
  276. ;      12   8  13   9  14  10  15  11
  277.  
  278.     or.l    d1,d0
  279.  
  280. ;    00110011001100110011001100110011 -> d0
  281.  
  282.     move.l    a4,d1
  283.     move.l    d4,d2
  284.     lsl.l    #4,d2
  285.     or.l    d2,d1
  286.     and.l    d5,d1
  287.     lsr.l    #1,d1
  288.  
  289. ;    00004321000043210000432100004321
  290. ;    43210000432100004321000043210000
  291. ;    43214321432143214321432143214321
  292. ;    00010001000100010001000100010001 -> d1
  293. ;      20  16  21  17  22  18  23  19
  294.  
  295.     move.l    a6,d3
  296.     move.l    a7,d2
  297.     lsl.l    #4,d2
  298.     or.l    d2,d3
  299.     and.l    d5,d3
  300.  
  301. ;    00004321000043210000432100004321
  302. ;    43210000432100004321000043210000
  303. ;    43214321432143214321432143214321
  304. ;    00100010001000100010001000100010 -> d3
  305. ;      28  24  29  25  30  26  31  27
  306.  
  307.     or.l    d3,d1
  308.  
  309. ;    00110011001100110011001100110011 -> d1
  310.  
  311.     lsl.l    #4,d1
  312.     or.l    d1,d0            ;d0 = mezcla de todas las longs
  313.  
  314. ;    11111111111111111111111111111111 -> d0
  315.  
  316.     move.l    d0,30720(a6)            ;Pintamos 32 pixels de golpe en el Plano 1
  317.     addq.l    #4,a6
  318.     
  319.     move.w    (sp)+,d0
  320.     dbra    d0,.loopX
  321.     move.w    (sp)+,d1
  322.     move.l    (sp)+,d2
  323.     adda.l    d2,a6
  324.     dbra    d1,.loopY
  325.     rts
  326.  
  327.  
  328. ;--------------------------------------------------------------------------------
  329. ;Calculo de tiempos en el cache:
  330. ;--------------------------------------------------------------------------------
  331. ;
  332. ;    1 MOVEq para mascara    = 1 * 2 =  2 ciclos
  333. ;    8 MOVEs ()+,Rn        = 8 * 5 = 40 ciclos
  334. ;    8 MOVEs Rn,Dn        = 8 * 2 = 16 ciclos
  335. ;    4 ANDs    entre registros    = 4 * 2 =  8 ciclos
  336. ;    7 LS?s            = 7 * 4 = 28 ciclos
  337. ;    7 ORs    entre registros    = 7 * 2 = 14 ciclos
  338. ;    1 MOVE    Dn,()        =       =  3 ciclos
  339. ;                     ----
  340. ;                     111 ciclos
  341. ;A partir del segundo plano:
  342. ;
  343. ;    1 LSL #1,D5        = 1 * 4 =  4 ciclos    
  344. ;    8 MOVEs Rn,Dn        = 8 * 2 = 16 ciclos
  345. ;    4 ANDs    entre registros    = 4 * 2 =  8 ciclos
  346. ;    7 LS?s            = 7 * 4 = 28 ciclos
  347. ;    7 ORs    entre registros    = 7 * 2 = 14 ciclos
  348. ;    1 MOVE    Dn,d16()    = 1 * 4 =  3 ciclos
  349. ;       1 ADDQ            = 1 * 2 =  2 ciclos
  350. ;    dbra            = 1 * 6 =  6
  351. ;                     ----
  352. ;                      79 ciclos
  353. ;
  354. ;+---------------------------------------------------------------+
  355. ;| 1x1 16 colores  = (111 + 79 * 3) / 32 = 10.8   ciclos / pixel |
  356. ;+---------------------------------------------------------------+
  357.